import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

import javax.jms.Message;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.thoughtworks.xstream.XStream;

public class SndAdaptor {
	private Log log = LogFactory.getLog(SndAdaptor.class);
	private String workDir;
	private SqlSessionFactory sqlSessionFactory;
	InputStream inputStream = null;

	// 어댑터 시작 시 초기화 메소드
	public void init() throws Exception {

		log.info("== init start ==");
		//sql mapper xml의 경로를 지정한다. 
		String resource = "config/SqlSessionConfig.xml";
		inputStream = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,
				"development1");
		SqlSession session = sqlSessionFactory.openSession();

		log.info("== export tables start ==");
		//List<Map<String, String>> columnInfoList 에 테이블 정보를 긁어 온다.
		List<Map<String, String>> columnInfoList = session
				.selectList("practice.getTableInfo");
		log.info("select table export : " + columnInfoList);
		//xml 파일로 만드는 메서드 호출
		writeFile(columnInfoList);

		log.info("== export tables end ==");

	}
	//xml 파일을 만드는 메서드 XStream을 사용 했다.
	public void writeFile(List<Map<String, String>> columnInfoList)
			throws Exception {
		//해당 경로와 생성되는 파일명을 지정한다.
		setWorkDir("D:\\temp\\snd\\send\\practice.xml");
		//넘어온 DB정보를 List<Map<String, String>> list 에 담아서 xml로 파싱한다.
		List<Map<String, String>> list = columnInfoList;
		//XStream 객체 생성
		XStream xStream = new XStream();
		//xml 파일 생성
		xStream.toXML(list, new FileOutputStream(getWorkDir()));
	}

	public String getWorkDir() {
		return workDir;
	}

	public void setWorkDir(String workDir) {
		this.workDir = workDir;
	}

}
